package Exception;

/**
 * throw关键字，允许程序主动对外抛出异常
 * 通常下列情况会主动对外抛出异常
 * 1:当前代码片段遇到了异常，但是该异常不应当在当前代码片段被处理(责任制问题)
 * 2:程序可以运行，但是运行场景不满足业务要求时可以对调用者抛出异常(本案例演示该场景)
 */
public class ThrowDemo {
    public static void main(String[] args) {
        Person person = new Person();
        //person.setAge(22);//不满足业务逻辑！
        //person.setAge(1000);

        //在Person中setAge()里加入throw方法:throw new RuntimeException("年龄不合法");
        //该程序运行结果为：
        /*
            Exception in thread "main" java.lang.RuntimeException: 年龄不合法
	                   at Exception.Person.setAge(Person.java:21)
	                   at Exception.ThrowDemo.main(ThrowDemo.java:12)
         */

        //在Person中setAge()里加入throw方法:throw new Exception("年龄不合法");
        /*
           当调用一个含有throws声明异常抛出的方法时，编译器要求必须处理该异常，否则
           编译不通过。
           处理方式有两种:
           1:使用try-catch主动处理该异常
           2:可以在当前方法上继续使用throws对外声明该异常的抛出给上层调用者处理
           具体选取哪种取决于责任制问题，但永远不能在main方法上使用throws
         */

        try {
            person.setAge(1000);
        } catch (IllegalAgeException e) {
            e.printStackTrace();
        }

        System.out.println("此人年龄："+person.getAge());
    }
}
